package org.wangchaocheng.cloudgallery.common.converter;

import java.util.List;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.wangchaocheng.cloudgallery.dto.common.PageDTO;

/**
 * 基础的转换器 <br>
 * Type {@link DO} dataObject <br>
 * Type {@link DTO} dataTransferObject
 *
 * @author wangchaocheng
 * @date 2025/03/14
 */
public interface BaseConverter<DO, DTO> {

    /**
     * MP 分页对象 {@link Page}<{@link DO}> 转换为 {@link PageDTO}<{@link DTO}>
     *
     * @param page page
     * @return {@link Page}
     */
    default PageDTO<DTO> toPageDTO(Page<DO> page) {
        return new PageDTO<>(this.doList2DtoList(page.getRecords()), page.getTotal());
    }

    /**
     * {@link DTO} 对象转为 {@link DO} 对象
     *
     * @param dataTransferObject dto
     * @return {@link DO}
     */
    DO dto2Do(DTO dataTransferObject);

    /**
     * {@link List}<{@link DTO}> 列表转换为 {@link List}<{@link DO}>
     *
     * @param dataTransferObjectList dto 列表
     * @return {@link List}<{@link DO}>
     */
    List<DO> dtoList2DoList(List<DTO> dataTransferObjectList);

    /**
     * {@link DO} 对象转为 {@link DTO} 对象
     *
     * @param dataObject do
     * @return {@link DTO}
     */
    DTO do2Dto(DO dataObject);

    /**
     * {@link List}<{@link DO}> 列表转换为 {@link List}<{@link DTO}>
     *
     * @param dataObjectList do 列表
     * @return {@link List}<{@link DTO}>
     */
    List<DTO> doList2DtoList(List<DO> dataObjectList);

}
